import http from "wechat-http";

http.baseURL = 'https://live-api.itheima.net'
// 请求
http.intercept.request = (config) => {
  const token = getApp().token
  // token 存在 并且 调用的接口不是刷新token的接口，才进行if判断
  if (token && !config.url.includes('/refreshToken')) {
    // 信息中有header 就使用header本身 没有 就给它一个空对象
    config.header = config.header || {}
    // 将token添加到请求头中
    config.header.Authorization = token
  }
  return config
}

// 响应
http.intercept.response = async (res) => {
  // console.log(res);
  // 返回401 token失败
  if (res.statusCode === 401) {
    // refreshToken 过期的情况
    if (res.config.url.includes('/refreshToken')) {
      // 读取当前历史栈
      const pageStack = getCurrentPages()
      // 取出当前页面路径，登录成功能跳转到该页面
      const currentPage = pageStack[pageStack.length - 1]
      // 跳转到登录页
      wx.redirectTo({
        url: `/pages/login/index?returnUrl=/ ${currentPage.route}`
      })
      return data
    }


    // console.log(getApp().refreshToken);
    const { code, data } = await wx.http({
      // token失效后 需要刷新 token的接口， 并给这个接口传递refreshToken
      url: '/refreshToken',
      method: 'post',
      header: {
        Authorization: getApp().refreshToken
      }
    })
    if (code !== 10000) return wx.utils.toast()
    // 刷新token 接口返回最新的 token 和refreshToken
    getApp().setToken(data.token, data.refreshToken)
    // console.log(data);
    // 重新调用之前401的接口，拿到正确的数据返回
    const result = await wx.http({
      ...res.config
    })
    // 过滤接口返回的数据
    return result

  }
  return res.data
}
wx.http = http